[Chapter 29] 29.2 Rule Sets and m4
Author: Bryan Costales & Eric Allman
Date: 1999-01-06T19:51:12Z

#

| Chapter 29 Rule Sets |

## 29.2 Rule Sets and m4

When building a configuration file using the m4 technique (see Section 19.1, "The m4 Preprocessor"), sendmail reserves certain rule-set numbers for its own use. Using the m4 technique, you can add rules to those rule sets, but you cannot replace those rule sets with your own. A few m4 keywords are available to make adding rules easier. They affect rule sets 0 through 3 directly and other rule sets indirectly (see Table 19.5 in Section 19.4.3, "Rules and rule sets").

The configuration file created with the m4 technique uses quite a few rule sets beyond the base group of 0 through 5. Table 29.1 shows all the rule sets used by the bare bones m4 technique. They are listed numerically, which also just happens to group them by function. The table also includes the name of the file containing the rules for each rule set.

Table 29.1: Rule Sets Used by the m4 Technique
Set | File | Description
--- | --- | ---
`S0` | m4/proto.m4 | Select a delivery agent
`S1` | m4/cfhead.m4 | Process all sender addresses
`S2` | m4/cfhead.m4 | Process all recipient addresses
`S3` | m4/proto.m4 | Preprocess all addresses
`S4` | m4/proto.m4 | Postprocess all addresses
`S5` | m4/proto.m4 | Post alias select a delivery agent
`S10` | mailer/local.m4 | Handle `S=` for `local` delivery agent
`S11` | mailer/smtp.m4 | Handle `S=` for `smtp` delivery agents
`S12` | mailer/uucp.m4 | Handle `S=` for `uucp` delivery agents
`S15` | mailer/mail11.m4 | Handle `S=` for `mail11` delivery agent
`S20` | mailer/local.m4 | Handle envelope `R=` for `local` delivery agent
`S21` | mailer/smtp.m4 | Handle envelope `R=` for `smtp` delivery agents
`S22` | mailer/uucp.m4 | Handle envelope `R=` for `uucp` delivery agents
`S25` | mailer/mail11.m4 | Handle envelope `R=` for `mail11` delivery agent
`S30` | mailer/local.m4 | Handle <@> and masquerading for `local` delivery agent
`S31` | mailer/smtp.m4 | Handle ALL_MASQUERADE envelope `R=` for `smtp`
`S40` | mailer/local.m4 | Handle header `R=` for `local` delivery agent
`S42` | mailer/uucp.m4 | Handle header `R=` for `uucp` delivery agents
`S50` | mailer/local.m4 | Rules to add local domain (if ALWAYS_ADD_DOMAIN)
`S51` | mailer/smtp.m4 | Convert pseudo-domains to real domains
`S52` | mailer/uucp.m4 | Handle envelope `S=` for `uucp-dom` delivery agent
`S61` | mailer/smtp.m4 | Handle ALL_MASQUERADE envelope `R=` for `relay` agent
`S71` | mailer/smtp.m4 | Handle envelope header `R=` for `relay` agent
`S72` | mailer/uucp.m4 | Handle envelope `S=` for `uucp-uudom` delivery agent
`S90` | m4/proto.m4 | Try domain part of mailertable entry
`S93` | m4/proto.m4 | Convert header names to masqueraded form
`S94` | m4/proto.m4 | Convert envelope names to masqueraded form
`S95` | m4/proto.m4 | Canonify mailer:[user@]host syntax to triple
`S96` | m4/proto.m4 | Handle common rule set 3 needs
`S98` | m4/proto.m4 | Handle local part of rule set 0

29.1 The S Configuration Command |  | 29.3 The Sequence of Rule Sets